<?php

class Application_Model_Prix
{
	protected $id_produit;
	protected $id_type_prix;
	protected $prix;

	//--setters et getters--
	public function setIdProduit($id)
	{
		$this->id_produit = $id;
	}

	public function getIdProduit()
	{
		return $this->id_produit;
	}

	public function setIdTypePrix($id)
	{
		$this->id_type_prix = $id;
	}

	public function getIdTypePrix()
	{
		return $this->id_type_prix;
	}

	public function setPrix($prix)
	{
		$this->prix = $prix;
	}

	public function getPrix()
	{
		return $this->prix;
	}
	//----------------------

	public function getByIds($id_produit,$id_type_prix)//complète l'objet à partir du type de prix et du produit que l'on recherche
	{
		$db = new Application_Model_PrixTable();
		$rows = $db->fetchAll($db->select()
		->where('id_produit = ?',$id_produit)
		->where('id_type_prix = ?',$id_type_prix)
		);
		if(count($rows)>0)
		{
			$this->setIdProduit($id_produit);
			$this->setIdTypePrix($id_type_prix);
			$this->setPrix($rows[0]['prix']);
		}
		else
		{
			/*
			 *
			 * Normalement ce cas n'arrive jamais : chaque produit a un prix pour chaque type de prix.
			 * Au cas où il y ait un bug et qu'il manque un enregistrement, on renvoie -1, valeur qui est gérée par PrixproduitController
			 *
			 */
			$this->setIdProduit($id_produit);
			$this->setIdTypePrix($id_type_prix);
			$this->setPrix(-1);
		}
		return $this;
	}

	//-------------------------
	public function update()
	{
		$db = new Application_Model_PrixTable();
		$old_prix = new Application_Model_Prix();
		$old_prix = $old_prix->getByIds($this->getIdProduit(),$this->getIdTypePrix());//on stocke l'ancien prix

		$where = array('id_type_prix = ?' => $this->getIdTypePrix(),
		 'id_produit = ?' => $this->getIdProduit()
		);
		$data = array('prix' => $this->getPrix());
		if($old_prix->getPrix() != -1) //le prix = -1 n'arrive normalement jamais, mais on le gère au cas où (voir ligne 55 de ce même fichier)
		{
			if($old_prix->getPrix() != $this->getPrix())//si le prix a changé alors on fait un update
			{
				$db->update($data,$where);
				//inscription dans l'historique
				$libelle = "Modification du prix n°".$this->getIdTypePrix()." pour le produit n°".$this->getIdProduit()." - passage de ".$old_prix->getPrix()."€ à ".$this->getPrix()."€";
				$histo = new Application_Model_HistoSystemElement($libelle);
				$histo->AddToHistoSystem();
			}
		}
		else//gestion du cas où il manque l'enregistrement pour ce produit et ce type de prix (n'arrive normalement jamais)
		{
			$new_data = array('id_type_prix' => $this->getIdTypePrix(),
			'id_produit' => $this->getIdProduit(),
			'prix' => $this->getPrix()
			);
			$db->insert($new_data);//dans ce cas on ne fait pas un update, mais un insert
			//inscription dans l'historique
			$libelle = "Ajout du prix n°".$this->getIdTypePrix()." pour le produit n°".$this->getIdProduit()." : ".$this->getPrix()."€";
			$histo = new Application_Model_HistoSystemElement($libelle);
			$histo->AddToHistoSystem();
			//fin historique
			return $this;
		}
	}

	public function save()//fonction qui permet d'enregistrer dans la BDD l'objet
	{
		$db = new Application_Model_PrixTable();
		$data = array('id_produit' => $this->getIdProduit(),
		'id_type_prix' => $this->getIdTypePrix(),
		'prix' => $this->getPrix()
		);
		$db->insert($data);
		//inscription dans l'historique
		$libelle = "Ajout du prix n°".$this->getIdTypePrix()." pour le produit n°".$this->getIdProduit()." : ".$this->getPrix()."€";
		$histo = new Application_Model_HistoSystemElement($libelle);
		$histo->AddToHistoSystem();
		//fin historique
		return $this;
	}
}